package classification;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import analyseText.TagFenxi;
import batching.TextBatch;

public class UserTagClassfication {
	// 将SinaUserHasSinaUserTag文件夹和SinaUserTag文件夹下的文件信息按照TagId进行合并。<String,
	// HashMap<String, String>>,
	// String第一个表示TagId,第二个表示Tag,第三个表示用户id。
	private static HashMap<String, HashMap<String, String>> allTheTagInfo = new HashMap<String, HashMap<String, String>>();
	// 将tagId 和 tag 加入HashMap
	private static HashMap<String, String> tagIdAndTag = new HashMap<String, String>();
	// 将tagId 和 userId 加入HashMap,每个userId对应多个tagId
//	private static HashMap<String, String> tagIdAndUser = new HashMap<String, String>();
	
	//将tagId 和 userId 加入HashMap,每个userId对应多个tagId
	private static HashMap<String,String[]> userIdAndTagId = new HashMap<String,String[]>();
	
	private static String tagDir=null;

	/**
	 * 对用户分类之前的数据准备并创建Map
	 * @param dir (String)SinaUserTag文件夹的绝对路径
	 * @param userIdDir (String) SinaUserHasSinaUserTag文件夹的绝对路径
	 * @return void
	 * */

	public void createMap(String dir,String userIdDir) {
		TextBatch p = new TextBatch();
		TagFenxi t = new TagFenxi();
		
		// 创建SinaUserTag文件夹目录数组
		File fileDir = new File(dir);
		File[] textFiles = fileDir.listFiles();
		
		//创建SinaUserHasSinaUserTag文件目录数组
		File fileUserDir = new File(userIdDir);
		File[] userFiles = fileUserDir.listFiles();
		
		String content = null;
		
		//分析SinaUserTag 文件夹下的文件
		for (int i = 0; i < textFiles.length; i++) {

			if (textFiles[i].isFile()
					&& textFiles[i].getName().endsWith(".txt")) {
				try {
					content = p.fileToString(textFiles[i].getCanonicalPath());
					// 开始分析文本内容
					tagIdAndTag = t.addTagIdAndTag(content);
					
				} catch (IOException e) {
					e.printStackTrace();
				}

			}
		}
		
		//分析SinaUserHasSinaUserTag 文件夹下的文件
		for (int i = 0; i < userFiles.length; i++) {

			if (userFiles[i].isFile()
					&& userFiles[i].getName().endsWith(".txt")) {
				try {
					content = p.fileToString(userFiles[i].getCanonicalPath());
					// 开始分析文本内容
					userIdAndTagId = t.addTagIdAndUser(content);

				} catch (IOException e) {
					e.printStackTrace();
				}

			}
		}
		
	}
	
	/**
	 * 创建用户tag标签文件
	 * @param tagDir (String)存储tag标签文件的文件夹绝对路径
	 * @return String 返回存储路径的绝对地址
	 * */
	public String createTagsFile(String tagDir){
		TextBatch p = new TextBatch();
		for(String tagId : tagIdAndTag.keySet()){
			p.writeTxt("", tagDir + "\\" + tagIdAndTag.get(tagId)+".txt");
		}
		return this.tagDir=tagDir;
	}
	
	/**
	 * 将不同用户id写入已经创建好的各种类型标签文本文件中
	 * */
	public void classifyUser(){
		TextBatch p = new TextBatch();
		File tagDirList = new File(tagDir);
		File[] tagFiles = tagDirList.listFiles(); 
		//对userId map进行遍历
		for(String userId : userIdAndTagId.keySet()){
//			System.out.print(userId+"\t");
			//将每个userId对应的tagId数组读出来
			String[] tagId=userIdAndTagId.get(userId);
			//对每个tagId进行判断，将符合类型的userId写进该标签文件中
			for(int i=0;i<tagId.length;i++){
				if(tagId[i]!=null){
					for(int j=0;j<tagFiles.length;j++){
						if((tagFiles[j].getName()).equals(tagIdAndTag.get(tagId[i])+".txt")){
//							System.out.print(tagId[i]+"  ");
							p.writeText2End(tagDir+"\\"+tagIdAndTag.get(tagId[i])+".txt", userId);
						}
					}
				}
			}
//			System.out.println("");
		}
		
		
	}

	
	public static void main(String args[]){
		String dir="E:\\WordSplit\\DataShow\\weibo_datas\\SinaNormalRobot\\SinaUserTag";
		String userIdDir="E:\\WordSplit\\DataShow\\weibo_datas\\SinaNormalRobot\\SinaUserHasSinaUserTag";
		String tagDir="F:\\用户分类标签";
		UserTagClassfication u=new UserTagClassfication();
		u.createMap(dir, userIdDir);
		u.createTagsFile(tagDir);
		u.classifyUser();
//		int i=0,j=0;
//		for(String str :u.tagIdAndTag.keySet()){
//			i++;
//		}
//		for(String str : u.userIdAndTagId.keySet()){
//			j++;	
//		}
//		System.out.println("i:"+i+"\t"+"j:"+j);
	}

}
